153 research outputs found
A Linear/Producer/Consumer Model of Classical Linear Logic
This paper defines a new proof- and category-theoretic framework for
classical linear logic that separates reasoning into one linear regime and two
persistent regimes corresponding to ! and ?. The resulting
linear/producer/consumer (LPC) logic puts the three classes of propositions on
the same semantic footing, following Benton's linear/non-linear formulation of
intuitionistic linear logic. Semantically, LPC corresponds to a system of three
categories connected by adjunctions reflecting the linear/producer/consumer
structure. The paper's metatheoretic results include admissibility theorems for
the cut and duality rules, and a translation of the LPC logic into category
theory. The work also presents several concrete instances of the LPC model.Comment: In Proceedings LINEARITY 2014, arXiv:1502.0441
Tealeaves: Structured Monads for Generic First-Order Abstract Syntax Infrastructure
Verifying the metatheory of a formal system in Coq involves a lot of tedious "infrastructural" reasoning about variable binders. We present Tealeaves, a generic framework for first-order representations of variable binding that can be used to develop this sort of infrastructure once and for all. Given a particular strategy for representing binders concretely, such as locally nameless or de Bruijn indices, Tealeaves allows developers to implement modules of generic infrastructure called backends that end users can simply instantiate to their own syntax. Our framework rests on a novel abstraction of first-order abstract syntax called a decorated traversable monad (DTM) whose equational theory provides reasoning principles that replace tedious induction on terms. To evaluate Tealeaves, we have implemented a multisorted locally nameless backend providing generic versions of the lemmas generated by LNgen. We discuss case studies where we instantiate this generic infrastructure to simply-typed and polymorphic lambda calculi, comparing our approach to other utilities
Ideograph: A Language for Expressing and Manipulating Structured Data
We introduce Ideograph, a language for expressing and manipulating structured
data. Its types describe kinds of structures, such as natural numbers, lists,
multisets, binary trees, syntax trees with variable binding, directed
multigraphs, and relational databases. Fully normalized terms of a type
correspond exactly to members of the structure, analogous to a Church-encoding.
Moreover, definable operations over these structures are guaranteed to respect
the structures' equivalences. In this paper, we give the syntax and semantics
of the non-polymorphic subset of Ideograph, and we demonstrate how it can
represent and manipulate several interesting structures.Comment: In Proceedings TERMGRAPH 2022, arXiv:2303.1421
Principals in Programming Languages: A Syntactic Proof Technique
Programs are often structured around the idea that different pieces of code comprise distinct principals, each with a view of its environment. Typical examples include the modules of a large program, a host and its clients, or a collection of interactive agents.In this paper, we formalize this notion of principal in the programming language itself. The result is a language in which intuitive statements such as, "the client must call open to obtain a file handle," can be phrased and proven formally.We add principals to variants of the simply-typed λ-calculus and show how we can track the code corresponding to each principal throughout evaluation. This multiagent calculus yields syntactic proofs of some type abstraction properties that traditionally require semantic arguments.Engineering and Applied Science
Everything You Want to Know About Pointer-Based Checking
Lack of memory safety in C/C++ has resulted in numerous security vulnerabilities and serious bugs in large software systems. This paper highlights the challenges in enforcing memory safety for C/C++ programs and progress made as part of the SoftBoundCETS project. We have been exploring memory safety enforcement at various levels - in hardware, in the compiler, and as a hardware-compiler hybrid - in this project. Our research has identified that maintaining metadata with pointers in a disjoint metadata space and performing bounds and use-after-free checking can provide comprehensive memory safety. We describe the rationale behind the design decisions and its ramifications on various dimensions, our experience with the various variants that we explored in this project, and the lessons learned in the process. We also describe and analyze the forthcoming Intel Memory Protection Extensions (MPX) that provides hardware acceleration for disjoint metadata and pointer checking in mainstream hardware, which is expected to be available later this year
- …